package org.flexthinker.binding.value
{
    /**
     * Interface implemented by domain objects that can publish property change events.
     * Clients can use this interface to subscribe to the object for change notifications.
     */
    public interface PropertyChangePublisher
    {

        /**
         * Register a listener for a specific property.
         * @param listener the <code>PropertyChangeListener</code> to register
         */
        function addPropertyChangeListener( listener:PropertyChangeListener ):void;

        /**
         * Removed a listener for a specific property.
         * If all listeners are removed, implementation should stops watching the property.
         * @param listener the <code>PropertyChangeListener</code> to remove.
         */
        function removePropertyChangeListener( listener : PropertyChangeListener ):void;

        /**
         * Removes all registered listeners and should stop watching the property.
         */
        function removeAllListeners():void;

        
    }
}